/**
 * PromptGenerator 组件相关的类型定义
 */

// 生成的提示词对象
export interface GeneratedPrompts {
  positive: string;  // 正向提示词
  negative: string;  // 反向提示词
}

// 组件 Props 接口
export interface PromptGeneratorProps {
  /** 插入提示词时的回调函数 */
  onInsert?: (positivePrompt: string, negativePrompt: string) => void;
  
  /** 输入框的占位符文本 */
  placeholder?: string;
  
  /** 生成按钮的文本 */
  buttonText?: string;
  
  /** 自定义 CSS 类名 */
  className?: string;
  
  /** 是否禁用组件 */
  disabled?: boolean;
  
  /** 自定义样式 */
  style?: React.CSSProperties;
  
  /** 最大输入字符数 */
  maxInputLength?: number;
  
  /** 是否显示字符计数 */
  showCharCount?: boolean;
}

// AI 模型请求参数
export interface AIModelRequest {
  messages: ChatMessage[];
  model?: string;
  max_tokens?: number;
  temperature?: number;
  top_p?: number;
  stream?: boolean;
}

// 聊天消息接口
export interface ChatMessage {
  role: 'user' | 'assistant' | 'system';
  content: string;
}

// AI 模型响应接口
export interface AIModelResponse {
  choices: Array<{
    delta?: {
      content?: string;
    };
    message?: {
      content: string;
    };
  }>;
}

// 组件状态接口
export interface PromptGeneratorState {
  isExpanded: boolean;
  inputText: string;
  generatedPrompts: GeneratedPrompts | null;
  isLoading: boolean;
  error: string | null;
}

// 提示词历史记录
export interface PromptHistory {
  id: string;
  inputText: string;
  generatedPrompts: GeneratedPrompts;
  timestamp: Date;
}

// 组件配置选项
export interface PromptGeneratorConfig {
  /** AI 模型配置 */
  aiModel: {
    apiUrl: string;
    model: string;
    maxTokens: number;
    temperature: number;
    topP: number;
  };
  
  /** UI 配置 */
  ui: {
    animationDuration: number;
    maxPanelWidth: number;
    minPanelWidth: number;
  };
  
  /** 功能配置 */
  features: {
    enableHistory: boolean;
    maxHistoryItems: number;
    autoSave: boolean;
  };
}

// 错误类型枚举
export enum PromptGeneratorError {
  NETWORK_ERROR = 'NETWORK_ERROR',
  API_ERROR = 'API_ERROR',
  PARSE_ERROR = 'PARSE_ERROR',
  VALIDATION_ERROR = 'VALIDATION_ERROR',
  TIMEOUT_ERROR = 'TIMEOUT_ERROR'
}

// 错误信息接口
export interface ErrorInfo {
  type: PromptGeneratorError;
  message: string;
  details?: any;
}

// 事件处理器类型
export type PromptInsertHandler = (positive: string, negative: string) => void;
export type ErrorHandler = (error: ErrorInfo) => void;
export type LoadingStateHandler = (isLoading: boolean) => void;

// 组件引用接口
export interface PromptGeneratorRef {
  /** 展开组件面板 */
  expand: () => void;
  
  /** 收起组件面板 */
  collapse: () => void;
  
  /** 清空输入内容 */
  clear: () => void;
  
  /** 获取当前生成的提示词 */
  getGeneratedPrompts: () => GeneratedPrompts | null;
  
  /** 设置输入文本 */
  setInputText: (text: string) => void;
  
  /** 触发生成 */
  generate: () => Promise<void>;
}

// 样式主题接口
export interface PromptGeneratorTheme {
  colors: {
    primary: string;
    secondary: string;
    success: string;
    error: string;
    warning: string;
    background: string;
    surface: string;
    text: string;
    textSecondary: string;
    border: string;
  };
  
  spacing: {
    xs: string;
    sm: string;
    md: string;
    lg: string;
    xl: string;
  };
  
  borderRadius: {
    sm: string;
    md: string;
    lg: string;
  };
  
  shadows: {
    sm: string;
    md: string;
    lg: string;
  };
}

// 本地化文本接口
export interface PromptGeneratorLocale {
  triggerButton: string;
  generateButton: string;
  insertButton: string;
  closeButton: string;
  placeholder: string;
  positivePromptLabel: string;
  negativePromptLabel: string;
  loadingText: string;
  errorMessages: {
    networkError: string;
    apiError: string;
    parseError: string;
    validationError: string;
    timeoutError: string;
    emptyInput: string;
  };
}

// 导出默认配置
export const DEFAULT_CONFIG: PromptGeneratorConfig = {
  aiModel: {
    apiUrl: '/api/ai-chat',
    model: 'Qwen3-32B',
    maxTokens: 1000,
    temperature: 0.7,
    topP: 0.9
  },
  ui: {
    animationDuration: 200,
    maxPanelWidth: 600,
    minPanelWidth: 480
  },
  features: {
    enableHistory: true,
    maxHistoryItems: 10,
    autoSave: false
  }
};

// 导出默认本地化文本
export const DEFAULT_LOCALE: PromptGeneratorLocale = {
  triggerButton: '🤖 AI生成提示词',
  generateButton: '生成提示词',
  insertButton: '插入提示词',
  closeButton: '✕',
  placeholder: '请输入自然语言描述，AI将为您生成SD提示词...',
  positivePromptLabel: '正向提示词 (Positive Prompt):',
  negativePromptLabel: '反向提示词 (Negative Prompt):',
  loadingText: '生成中...',
  errorMessages: {
    networkError: '网络连接失败，请检查网络设置',
    apiError: 'AI服务暂时不可用，请稍后重试',
    parseError: '响应解析失败，请重新生成',
    validationError: '输入内容不符合要求',
    timeoutError: '请求超时，请重新尝试',
    emptyInput: '请输入描述内容'
  }
};